It is generally desirable to locate and correct defects that adversely affect the operation of software products. Software developers have a wide variety tools and techniques for analyzing, describing, and documenting the behavior of software. “White box” testing tools and techniques verify the internal operation of software. “Black box” testing tools and techniques identify defects that occur when software interacts with external components or data.
Most commercially valuable software products have large numbers of possible configurations. The size and complexity of the testing infrastructure desirable for testing each configuration of a software product in a repeatable and deterministic manner often makes extensive white-box and black-box testing impractical and prohibitively expensive. Testability problems are exacerbated in stack-based computing environments, in which there is a hierarchy of software layers where interaction with the layer above or below occurs through a common interface specification. In stack-based computing environments, the operation of tested software is dependent on other components or data.
One example of a stack-based computing environment is a distributed computing system, such as a client/server system, which utilizes various protocol stacks. A protocol stack is a prescribed hierarchy of software layers used in a communication network. Other stack-based computing environments exist, such as storage stacks, and it is known for computing systems and aspects thereof to manipulate various types of stacks. Examples of testability problems in a stack-based computing environment include but are not limited to: difficulties replicating interdependencies between tested software and other components or data; difficulties identifying sources of errors; and the significant amount of hardware, software, and setup overhead that is generally required for administration of interoperability/performance tests.